import base64
import io
import os
from io import BytesIO

import requests
from PIL import Image
import sys
import ddddocr


def save_captcha_picture(b64_code):
    image_base64 = b64_code
    # 对base64字符串进行解码
    image_data = base64.b64decode(image_base64)

    # 使用BytesIO创建一个可读的字节流
    image_stream = BytesIO(image_data)

    # 使用PIL打开字节流中的图片
    image = Image.open(image_stream)

    # 保存图片到文件系统
    image.save("captcha.png", 'PNG')  # 保存为PNG格式，你也可以根据需要选择其他格式


# 识别验证码
def captcha_code_recognition_func(img):
    """
    识别验证码的函数
    :param img: 图片
    :return: 验证码字符串
    """
    if not os.path.exists(img):  # 检查图片文件是否存在
        print(f"图片文件不存在: {img}")
        return None
    if not os.path.isfile(img):  # 检查是否为文件
        print(f"不是有效的文件: {img}")
        return None

    # 创建DdddOcr对象，show_ad=False可以关闭启动时的广告
    ocr = ddddocr.DdddOcr(show_ad=False)
    # 打开验证码图片文件并读取
    with open(img, 'rb') as f:
        img_bytes = f.read()  # 读取图片文件的字节数据
    # 使用classification方法进行验证码识别
    res = ocr.classification(img_bytes)

    # 打印识别结果
    print({"captchaValue": res})
    # return res


def down_image(img_url, img_name):
    # print(f"正在处理 {img_url}")
    try:
        response = requests.get(img_url)
        if response.status_code == 200:
            img = Image.open(io.BytesIO(response.content))
            img.save(img_name)
        else:
            print(f"下载图片失败，错误代码：{response.status_code}")
    except Exception as e:
        print(f"下载图片时出错: {str(e)}")


if __name__ == '__main__':
    try:
        img_name = "captcha.png"
        down_image("http://novel.hctestedu.com/file/getVerify", img_name)
        captcha_code_recognition_func(img_name)
    except Exception as e:
        print(f"程序运行出错: {str(e)}")
